Skip to content

Add NativeGameLink for Steam - #244

Closed
senkumil wants to merge 1 commit into
SteamClientHomebrew:mainfrom
senkumil:add-nativegamelink-for-steam
Closed

Add NativeGameLink for Steam#244
senkumil wants to merge 1 commit into
SteamClientHomebrew:mainfrom
senkumil:add-nativegamelink-for-steam

Conversation

@senkumil

@senkumil senkumil commented Aug 31, 2026

Copy link
Copy Markdown

NativeGameLink for Steam

NativeGameLink for Steam is a Millennium plugin that transforms non-Steam shortcuts into native-style Steam Library experiences by linking them to their corresponding Steam AppIDs.

The original non-Steam executable and launch behavior remain intact. NativeGameLink uses the linked Steam AppID to reconstruct applicable Steam Library surfaces locally, providing a significantly richer experience for external games without converting them into owned Steam licenses.

Repository: https://github.com/senkumil/NativeGameLink-for-Steam

Current version: 3.0.0

image

Main Features

  • Automatic and manual linking of non-Steam shortcuts to Steam AppIDs.
  • Support for delisted, removed, retired, and unlisted Steam games.
  • Official Steam artwork, hero backgrounds, logos, capsules, and icons.
  • Optional SteamGridDB fallback when official Steam artwork is unavailable.
  • Native-style Steam Library information and controls.
  • Steam achievement metadata for linked non-Steam games.
  • Local achievement progress presentation for compatible non-Steam games.
  • Activity and news integration when available.
  • Community content integration when available.
  • Friends/social information when available.
  • DLC information when supported by the linked AppID.
  • Workshop information when supported by the linked AppID.
  • Local playtime tracking and Steam-style playtime presentation.
  • Big Picture integration for linked non-Steam shortcuts.
  • Artwork customization directly from the game's Properties interface.
  • Native Steam achievement-state management as an optional advanced feature.
  • Steam trading-card presentation and optional AppID idling functionality.

NativeGameLink does not grant ownership of Steam games, licenses, DLC, inventory items, trading cards, badges, XP, or Steam Cloud storage.

Linking a non-Steam shortcut does not unlock official Steam achievements. Native Steam achievement-state management is a separate, explicitly invoked optional feature.


Task Checklist

Developer

  • I am the original author or an authorized maintainer of this plugin.
  • I have complied with all license requirements for the libraries used, including providing appropriate notices where necessary.
  • My plugin is fully open source and does not depend on any external paid services, except for widely trusted and well-known platforms. Additionally, neither I nor anyone associated with me profits from any such services.

Plugin Functionality

  • I have tested the plugin on both the Stable and Beta Steam update channels.
  • My plugin is unique, or provides additional or alternative functionality to plugins already on the store.

Backend Configuration

No: I do not use a standard Millennium Python backend.

NativeGameLink uses Millennium's Lua backend:

backendType: "lua"

Yes: NativeGameLink includes custom binaries that are not implemented directly through Millennium's backend runtime.

The plugin includes two optional Windows C# helper executables:

  • backend/bin/steam_achievement_sync.exe
  • backend/bin/steam_card_farmer.exe

The complete corresponding C# source code is included in the repository:

  • backend/src/steam_achievement_sync.cs
  • backend/src/steam_card_farmer.cs

Achievement helper

steam_achievement_sync.exe communicates with the locally installed Steam client.

It can perform explicitly requested operations for native Steam games, including:

  • Reading achievement state.
  • Unlocking selected achievements.
  • Locking selected achievements.
  • Committing requested achievement-state changes through the local Steam client.

This functionality is optional and separate from NativeGameLink's non-Steam achievement presentation.

No native Steam achievement is modified merely by linking or opening a non-Steam shortcut.

AppID idling helper

steam_card_farmer.exe communicates with the locally installed Steam client and maintains an active local Steam session for a selected AppID until explicitly stopped by the user.

It is used by the optional AppID idling functionality.

The helper does not directly grant:

  • Trading cards.
  • Inventory items.
  • Badges.
  • XP.

Eligibility and item drops remain controlled by Steam.

Both helper executables operate locally and their complete source code is included in the repository for review.


External Services

NativeGameLink does not operate or depend on a proprietary remote backend service.

SteamGridDB integration is optional.

Users who choose to enable SteamGridDB fallback provide their own API key. The integration is used only to retrieve artwork when an appropriate official Steam asset is unavailable.


Platform

This submission has been tested on:

  • Windows + Steam Client Stable.
  • Windows + Steam Client Beta.

The two optional C# helper executables are currently Windows-specific.

Big Picture functionality has been tested through the Steam client.


Testing Instructions

1. Installation

  1. Install NativeGameLink for Steam through Millennium or place it in the Millennium plugins directory.
  2. Restart Steam.
  3. Enable NativeGameLink for Steam from Millennium's Plugins page.
  4. Verify that the plugin loads without errors.
  5. Open its settings interface and verify that it renders correctly.

2. Add a non-Steam game

  1. Add an external executable to Steam using Add a Non-Steam Game.
  2. Locate the resulting shortcut in the Steam Library.
  3. Open its Library page.
  4. NativeGameLink should detect that the entry is a non-Steam shortcut.

3. Link the shortcut to a Steam AppID

  1. Open NativeGameLink's linking interface.
  2. Allow NativeGameLink to search for a corresponding Steam release.
  3. Review the suggested result.
  4. Confirm the suggested AppID, select another candidate, or enter an AppID manually.
  5. Save the mapping.
  6. Verify that the original external executable remains unchanged.
  7. Launch the game.
  8. Confirm that Steam still launches the original non-Steam executable.

4. Library integration

After linking a compatible non-Steam game, verify the applicable Steam-style surfaces.

Depending on the information exposed by Steam for the selected AppID, NativeGameLink can display:

  • Official artwork.
  • Hero background.
  • Game logo.
  • Library capsule.
  • Library icon.
  • Game information.
  • Store navigation.
  • Community navigation.
  • Activity.
  • News.
  • Achievement metadata.
  • Playtime.
  • Community content.
  • Friends/social information.
  • DLC information.
  • Workshop information.

Not every Steam AppID exposes every surface, so availability can vary between games.

5. Artwork

  1. Link a non-Steam shortcut to an AppID with known Steam artwork.
  2. Verify that official Steam artwork is applied.
  3. Open the shortcut's Properties interface.
  4. Open NativeGameLink's artwork/customization controls.
  5. Change one of the available artwork assets.
  6. Close Properties.
  7. Verify that the selected artwork is updated in the Library.
  8. Restart Steam.
  9. Confirm that the selected artwork persists.

SteamGridDB fallback can optionally be tested by providing the tester's own SteamGridDB API key.

6. Non-Steam achievement presentation

  1. Link a non-Steam game that has Steam achievement metadata.
  2. Open its Library page.
  3. Verify that achievement metadata can be displayed.
  4. Verify achievement names, icons, descriptions, and progress presentation where available.
  5. Configure a compatible local achievement progress source if desired.
  6. Change local achievement progress.
  7. Verify that NativeGameLink updates the Library presentation.
  8. Confirm that this does not grant an official Steam achievement to the Steam account.

7. Playtime

  1. Launch a linked non-Steam game.
  2. Allow it to run for a measurable period.
  3. Exit the game.
  4. Return to its Library page.
  5. Verify that NativeGameLink presents the applicable playtime information.
  6. Restart Steam.
  7. Confirm that tracked information persists.

8. Persistence

  1. Link one or more non-Steam shortcuts.
  2. Configure their artwork and applicable NativeGameLink options.
  3. Fully exit Steam.
  4. Start Steam again.
  5. Verify that mappings remain intact.
  6. Verify that artwork remains intact.
  7. Verify that applicable Library information is restored.
  8. Verify that unrelated native Steam games remain unaffected unless the user explicitly invokes a feature intended for native Steam games.

9. Big Picture

  1. Link at least one non-Steam shortcut.
  2. Enter Steam Big Picture Mode.
  3. Locate the linked game.
  4. Open its game page.
  5. Verify the applicable NativeGameLink presentation.
  6. Verify artwork.
  7. Verify Library information.
  8. Verify playtime presentation where applicable.
  9. Launch the game.
  10. Return to desktop mode.
  11. Verify that normal desktop Library operation remains functional.

10. Native Steam achievement-state management

Optional advanced test.

This functionality can modify actual Steam achievement state. It should only be tested with a game and achievement that the tester is comfortable modifying.

  1. Select an owned native Steam game.
  2. Open NativeGameLink's achievement-management functionality.
  3. Verify that the current achievement state can be read.
  4. Select an appropriate test achievement.
  5. Optionally request an unlock or lock operation.
  6. Verify that the requested state is committed through the local Steam client.
  7. Restore the original state afterward if desired.

Implementation source:

backend/src/steam_achievement_sync.cs

11. AppID idling

Optional advanced test.

  1. Select a compatible Steam AppID.
  2. Start the optional AppID idling functionality.
  3. Verify that an active local Steam session is established for the selected AppID.
  4. Verify that the session remains active while idling is enabled.
  5. Stop idling.
  6. Verify that the helper exits.
  7. Verify that the corresponding Steam session is released cleanly.

Implementation source:

backend/src/steam_card_farmer.cs


Screenshots

1. Before linking — original non-Steam shortcut

Captura de pantalla 2026-08-26 163249

2. After linking — NativeGameLink Library integration

Captura de pantalla 2026-08-26 164536 pFDFDFng

3. Achievements / activity / game information

image image image image image image

4. Artwork customization / Properties integration

image image

5. Big Picture integration

aa ASDADASD

6. AppID linking / automatic detection

image

Steam Client Testing

The plugin author has tested NativeGameLink for Steam on:

  • Steam Client Stable.
  • Steam Client Beta.

Testing included the primary non-Steam linking workflow, Library integration, persistence, artwork, and Big Picture functionality.


Community Contribution

  • I have tested and left feedback on two other plugin pull requests.
  • I have added links to those feedback comments in this PR.

#218 (comment)
#204 (comment)


Third-party Verification

  • Verified by a third party on Steam Client Stable.
  • Verified by a third party on Steam Client Beta.

Additional Notes

NativeGameLink is designed primarily to enhance the Steam Library experience of non-Steam shortcuts while preserving their original executable and launch configuration.

The plugin intentionally separates non-Steam presentation features from the optional functionality that operates on native Steam games.

All custom helper source code required for reviewing the included C# executables is available directly in the repository.

@SenpaiXD13

Copy link
Copy Markdown

Testing Environment

  • OS: Windows 11 (64-bit)
  • Steam Client: Stable & Beta channels tested
  • Framework: Millennium (Lua backend)
  • Plugin: NativeGameLink for Steam v3.0.0 (PR Add NativeGameLink for Steam #244)
    Verification Summary
  • Installation & UI: Installed and loaded cleanly via Millennium without errors in logs. The configuration interface renders properly.
  • Shortcut Linking: Non-Steam executables link accurately to their respective Steam AppIDs both via search and manual ID entry. The original launch behavior remains untouched.
  • Library Integration & Art: Official Steam banners, hero assets, logos, and library capsules apply and persist across Steam restarts. Custom artwork changes via game properties save properly.
  • Metadata & Playtime: Local playtime tracking and achievement metadata displays correctly in both Desktop and Big Picture mode.
  • Optional Helpers: Reviewed source files for steam_achievement_sync and steam_card_farmer. Executables work locally as described without unintended side effects on standard Steam licenses.

Solid and innovative plugin that greatly enhances non-Steam library management. Everything works as intended!

@madmaxgrey

Copy link
Copy Markdown
Member

closing this PR due to complied executables with no source code provided as this may be malicious
you may create a new PR once those has been removed and anything relating to piracy features are removed

@madmaxgrey madmaxgrey closed this Sep 1, 2026
@ejalxndr

ejalxndr commented Sep 1, 2026

Copy link
Copy Markdown
Member

@SenpaiXD13 For your own sake, I've manually reverse-engineered the binaries in this PR as you've ran them and could be at risk. Everything has been confirmed safe, you are not infected.

As for @senkumil, our point still stands - we can't have compiled binaries in the source tree. You may be able to JIT compile C# code in powershell on the fly, without needing any binaries, ex:

Add-Type -TypeDefinition @"
public class Foo {
    public static int Add(int a, int b) => a + b;
}
"@
[Foo]::Add(2, 3)

This Powershell interop syntax supports the entirety of C#, not just a subset.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants